RV Script Generator — 操作手册
1. 概述
RV Script Generator 是一款基于 GUI 向导的 FIO RV(Reliability & Validation)测试脚本生成工具。它通过 7 步向导引导用户完成配置,自动生成:
- Shell 测试脚本(
.sh):控制风扇转速、执行 FIO 测试、收集结果日志 - FIO 配置文件:存放在
test/子目录下,定义 FIO 测试参数和磁盘配置
适用场景
- 服务器存储性能测试(FIO)
- 多风扇转速梯度下的 IO 性能对比
- 多盘并发 / 逐盘测试
- 支持 10 种 IPMI 平台的风扇控制
系统要求
- Windows 操作系统
- 无需安装 Python 解释器(
.exe已打包) - 程序所在目录需保留
test/文件夹(含 FIO 模板)和image/文件夹(含图标)
下载路径📁 本地下载
提示:点击按钮将打开网络文件夹,点击即可下载
| 文件 | 版本 | 格式 |
|---|---|---|
RV Script Generator v1.0.zip | v1.0 | ZIP |
2. 快速入门(5 分钟上手)
Step 1:新建项目
运行 RV Script Generator.exe,在 New Project 页面输入项目名称,选择输出目录。
Step 2:选择测试类型
进入 Test Type 页面,勾选需要的测试类型(默认全选),可调整 iodepth、runtime、ramp_time、log_avg_msec 参数。
Step 3:选择磁盘
进入 Drive Select 页面,勾选需要测试的磁盘。可选开启分组功能(如每组 6 块盘)。
Step 4:配置风扇
进入 Fan Speed 页面,输入风扇转速百分比(空格分隔),或点击快速预设按钮。
Step 5:选择 IPMI 平台
进入 Fan Control 页面,选择服务器平台,程序自动填入对应的 IPMI 控速和恢复命令。
Step 6:确认并生成
进入 Summary 页面查看所有配置,点击 Generate All 按钮生成脚本。
3. 界面导航
程序顶部有 7 步进度指示器,可点击任意步骤快速跳转:
| 步骤 | 名称 | 说明 |
|---|---|---|
| 1 | New Project | 项目名称与输出路径 |
| 2 | Test Type | 测试类型选择与 FIO 全局参数 |
| 3 | Drive Select | 目标磁盘选择与分组 |
| 4 | Fan Speed | 风扇转速百分比设定 |
| 5 | Fan Control | IPMI 平台与控速命令 |
| 6 | Summary | 配置总览,检查无误后生成 |
| 7 | Generate | 手动生成 & Sequential Runner |
导航按钮:底部有 < Back 和 Next > 按钮,Summary 页面额外显示 Generate All 按钮。
4. 各页面详细说明
4.1 New Project(新建项目)
| 字段 | 说明 |
|---|---|
| Project Name | 项目文件夹名称,不能含有 / \ : * ? " < > | |
| Output | 项目根目录路径,默认当前程序所在目录 |
| Browse... | 浏览选择输出目录 |
| Will create: | 实时预览完整路径 |
验证规则:项目名不能为空,不能包含非法字符。
4.2 Test Type(测试类型)
4.2.1 预设测试类型(10 种)
| 分组 | 测试类型 | rw | bs | 默认 iodepth | 默认 runtime |
|---|---|---|---|---|---|
| 4K Random | randread-4k | randread | 4k | 16 | 120s |
| 4K Random | randwrite-4k | randwrite | 4k | 16 | 120s |
| 128K Sequential | read-128k | read | 128k | 16 | 120s |
| 128K Sequential | write-128k | write | 128k | 16 | 120s |
| 256K Sequential | read-256k | read | 256k | 16 | 120s |
| 256K Sequential | write-256k | write | 256k | 16 | 120s |
| 64K Sequential | read-64k | read | 64k | 16 | 120s |
| 64K Sequential | write-64k | write | 64k | 16 | 120s |
| 1M Sequential | read-1M | read | 1M | 16 | 120s |
| 1M Sequential | write-1M | write | 1M | 16 | 120s |
每个测试类型可单独调整参数:
- iod (iodepth):并发 IO 深度
- run(s) (runtime):测试运行时长
- ramp(s) (ramp_time):预热时间
- logms (log_avg_msec):日志平均间隔
每组右侧有 All / None 快捷按钮。
4.2.2 自定义测试类型
勾选 Custom Test Type 可添加自定义测试,支持配置:
- Name:测试名称(如
my-test) - rw:randread / randwrite / read / write
- bs:块大小(如
64k、1M、4k) - tc:iops / bw(结果提取指标)
- iod:IO 深度
- run(s):运行时间
- ramp(s):预热时间
- logms:日志平均间隔
自定义类型没有对应的 FIO 模板文件,生成时会使用最近似模板(write 类 →randwrite-4k,其余 →randread-4k)。
4.2.3 FIO Settings(全局参数覆盖)
勾选 Use Global (override per-test values) 后,所有测试类型统一使用以下全局参数:
| 参数 | 可选值 | 默认值 |
|---|---|---|
| iodepth | 16 / 32 | 16 |
| runtime (s) | 120 / 300 / 600 / 900 | 120 |
| ramp_time (s) | 30 / 120 | 30 |
| log_avg_msec | 1000 / 12000 | 1000 |
4.2.4 FIO Output Case
决定生成的 shell 脚本中 IOPS/BW 提取关键字的大小写:
| 选项 | 适用平台 |
|---|---|
| lowercase (iops=/bw=) | 默认输出格式 |
| UPPERCASE (IOPS=/BW=) | 腾讯 / 云海平台(务必选择此项) |
4.2.5 Test Mode
决定 FIO 测试的运行方式:
| 选项 | 行为 |
|---|---|
| batch (all drives together) | 一次 FIO 命令测试组内所有盘 |
| per-drive (one by one) | 逐盘执行 FIO,配置文件名后缀 -sd$i,腾讯 / Steelix 平台使用 |
4.3 Drive Select(磁盘选择)
4.3.1 磁盘范围
支持 130 个磁盘标签:a-z(26)、aa-az(26)、ba-bz(26)、ca-cz(26)、da-dz(26)。
默认全部选中。可通过 Select All / Deselect All 全局切换。
每行右侧有 All / None 按钮快速切换该行。
4.3.2 分组选择 (Group Selection)
勾选 Enable Grouping 并输入每组磁盘数(如 6),可将选中磁盘分为多个测试组。
例如:24 块盘,每组 6 块 → 生成 4 组脚本(每组含独立 .sh 和 FIO 配置)。
分组模式下,输出文件命名为 <test_name>-<组号>.sh。
4.4 Fan Speed(风扇转速)
输入空格分隔的 PWM 百分比(0-100),例如:
20 30 40 50 60 70 75 80 85 90 95 100
快速预设:
| 预设 | 转速值 |
|---|---|
| Standard | 20 30 40 50 60 70 75 80 85 90 95 100 |
| Classic | 20 30 40 50 60 70 80 90 100 |
| Single 100 | 100 |
| Single 20 | 20 |
验证规则:至少一个值,每个值 0-100 整数。
4.5 Fan Control(IPMI 平台与风扇控制)
4.5.1 支持平台(10 种)
| 平台 | IPMI 命令格式 | 风扇控制器数 | 恢复自动方式 |
|---|---|---|---|
| Current IPT (0x3e 0x1f) | 0x3e 0x1f $j $fan $fan 0 0xff 0xff | 10 | 循环设定 21 100 |
| Seaking/Machamp (0x30 0xf6) | 0x30 0xf6 0x0$j $fan $fan 0x03 | 6 | 循环设定 20 100 |
| Pokemon (0x30 0xb7) | 0x30 0xb7 0x4 0xff $fan / 0x30 0xb7 0x5 0xff $fan | 1 | 复原 + 重启 BMC |
| Marshadow (0x38 0x41) | 0x38 0x41 0 $fan 0xff | 1 | 0x38 0x41 4 0 0xff |
| Kingler (0x2e 0x11) | 0x2e 0x11 0xa9 0x19 0x00 7 $fan(需先发 preamble) | 1 | ipmitool raw 6 2 + mc reset cold |
| Steelix (0x3e 0xf6) | 0x3e 0xf6 $j $fan $fan 0x03 | 5 | 循环设定 30 30 |
| Yunhai (0x3e 0x31) | 0x3e 0x31 0x00 $fan(需先发 0x3e 0x2f 0x01) | 1 | 0x3e 0x31 0x00 50 |
| U90G5/Poyanghu (0x3e 0x03) | 0x3e 0x03 0x0$j $fan | 8 | 循环设定 50 |
| Kunlun/2U42 (0x3e 0x03) | 0x3e 0x03 $j $fan | 8 | 循环设定 50 |
| Auto Only (no IPMI) | 无 IPMI 命令 | 1 | 空(不控速) |
4.5.2 自定义命令
切换平台后,Set Fan Command 和 Restore Auto Command 文本框自动填入预设命令。用户可以手动编辑这两个文本框,修改后会以用户编辑后的版本生成脚本。
- Fan Controllers:控制器数量(影响
for j in seq 1 <count>循环) - Set Fan Command:设定风扇转速的 IPMI 命令
- Restore Auto Command:测试结束后恢复自动控速的命令
4.6 Summary(摘要)
展示项目完整配置概览,包括:
- 项目名称和输出路径
- 所有测试类型及参数
- FIO 全局设置
- 磁盘列表和分组信息
- 风扇转速和 IPMI 平台
- 预计生成的文件列表
确认无误后点击 Generate All 生成,或点击 Next > 进入最后一页。
4.7 Generate(生成页)
4.7.1 Generate All 回顾
此页面的 Generate All 按钮功能与 Summary 页相同。
4.7.2 Sequential Runner(串行执行器)
用于从已有的多个 .sh 脚本生成统一的 run_all.sh 执行器。
操作步骤:
- 点击 Browse .sh Files 选择已有的 shell 脚本
- 勾选需要包含的脚本
- 点击 Generate run_all.sh,选择输出目录
- 生成
run_all.sh,按顺序执行选中的脚本(每个脚本之间sleep 3)
5. 生成的文件结构
<Output>/<ProjectName>/
├── randread-4k.sh # 每个测试类型的 shell 脚本
├── randwrite-4k.sh
├── read-128k.sh
├── write-128k.sh
├── ...
└── test/ # FIO 配置文件目录
├── randread-4k-1-16-85%-none
├── randwrite-4k-1-16-85%-none
├── read-128k-1-16-85%-none
├── write-128k-1-16-85%-none
└── ...
分组模式下的命名:
├── randread-4k-1.sh # 第 1 组
├── randread-4k-2.sh # 第 2 组
└── test/
├── randread-4k-1-16-85%-1 # 第 1 组 FIO 配置
├── randread-4k-1-16-85%-2 # 第 2 组 FIO 配置
└── ...
逐盘模式 (per-drive) 下的 FIO 配置命名:
test/
├── randread-4k-1-16-85%-sd$i # 运行时 $i 替换为盘符
└── ...
6. Shell 脚本执行流程
生成的 .sh 脚本在目标 Linux 服务器上执行,流程如下:
1. 创建结果目录结构
├── result/smart/ # S.M.A.R.T 信息
├── result/value/ # 解析后的 IOPS/BW 数据
├── result/log/ # FIO 原始输出日志
└── result/dev/sd*/ # 每盘目录
2. 收集测试前 S.M.A.R.T 信息 (smartctl --all)
3. 风扇转速循环 (for fan in <speeds>)
├── IPMI 控速命令
├── sleep <平台等待时间>
├── fio 测试(batch 或 per-drive)
└── 提取 IOPS/BW 结果
4. 结果后处理
├── 合并各风扇转速下的 csv 数据
└── 提取每盘时序数据
5. 恢复风扇自动控速
6. 收集测试后 S.M.A.R.T 信息
7. 重命名结果目录(附加时间戳)
7. FIO 配置文件说明
FIO 配置文件为标准 FIO job file 格式:
#Config File for randread-4k-1-16-85%-none
[global]
ioengine=libaio
direct=1
buffered=0
rw=randread
bs=4k
numjobs=1
iodepth=16
runtime=120
ramp_time=30
time_based
[sda-randread-4k-1-16-85%-none]
filename=/dev/sda
size=85%
write_bw_log=...
write_iops_log=...
write_lat_log=...
log_avg_msec=1000
生成时会根据用户选择动态修改:
rw/bs/iodepth/runtime/ramp_time/log_avg_msec参数- 驱动节点
filename=/dev/sdX和 section header - 日志路径中的项目名称
8. IPMI 平台选择参考
| 服务器型号 | 推荐平台 |
|---|---|
| 最新 IPT 服务器 | Current IPT (0x3e 0x1f) |
| Seaking / Machamp 平台 | Seaking/Machamp (0x30 0xf6) |
| Pokemon 平台 | Pokemon (0x30 0xb7) |
| Marshadow / 富士康平台 | Marshadow (0x38 0x41) |
| Kingler / 腾讯平台 | Kingler (0x2e 0x11) |
| Steelix 平台 | Steelix (0x3e 0xf6) |
| 云海平台 | Yunhai (0x3e 0x31) |
| U90G5 / Poyanghu | U90G5/Poyanghu (0x3e 0x03) |
| 昆仑 / 2U42 | Kunlun/2U42 (0x3e 0x03) |
| 无需 IPMI 控速 | Auto Only (no IPMI) |
平台特定配置提示
| 平台 | FIO Output Case | Test Mode |
|---|---|---|
| 腾讯 / Kingler | UPPERCASE | per-drive |
| 云海 / Yunhai | UPPERCASE | batch |
| Steelix | lowercase | per-drive |
| 其他平台 | lowercase(默认) | batch(默认) |
9. 常见问题
Q1:生成时提示 "Template not found"
程序目录下的 test/ 文件夹缺少对应的 FIO 模板文件。模板文件命名规范为 <test_name>-1-16-85%-none。Shell 脚本正常生成,但 FIO 配置文件被跳过。
Q2:如何添加新的 FIO 模板?
在 test/ 目录下放置新的模板文件,格式参照现有模板(含 [global] 和 [sda-xxx] 格式的 section)。
Q3:自定义测试类型找不到模板?
自定义类型没有对应模板,程序自动选择最近似模板:
- write 类 →
randwrite-4k-1-16-85%-none - 其余 →
randread-4k-1-16-85%-none
Q4:风扇转速 100% 的特殊处理
生成的脚本中,当风扇转速为 100 时,会自动替换为 99(if [ ${fan} == 100 ];then fan=99;fi),这是为了适应 FIO 日志的提取逻辑。
Q5:逐盘模式 vs 批量模式
- batch:一次 FIO 命令测试组内所有盘,速度快
- per-drive:逐盘串行测试,单盘结果更独立。腾讯 / Steelix 平台通常要求此模式
Q6:分组 vs 不分组
- 不分组:所有选定盘在一个 shell 脚本中统一测试
- 分组:每组生成独立的
.sh脚本和 FIO 配置,适合分批测试或并行执行
10. 最佳实践
- 测试前确认平台:向 BMC 团队确认服务器的 IPMI 命令格式是否正确
- 腾讯平台特别注意:FIO Output Case 选 UPPERCASE,Test Mode 选 per-drive
- 云海平台:FIO Output Case 选 UPPERCASE
- 模板更新:如果默认 FIO 参数不满足需求,直接修改
test/下的模板文件 - 自定义命令:如果预设 IPMI 命令不正确,可在 Fan Control 页面直接编辑文本框
- 保留模板目录:
test/和image/文件夹须与.exe放在同一目录
11. 文件清单
| 文件/目录 | 说明 |
|---|---|
RV Script Generator.exe | 主程序(Windows 可执行文件) |
test/ | FIO 配置文件模板(10 个) |
image/RV Script.png | 程序图标 |
image/RV_Script_Generator.ico | Windows 图标 |
IPMItool命令大全.txt | IPMI 命令参考手册 |
README.md | 本操作手册 |